====== Comment s'adapter à la bibliothèque SDL ======
<note>Note personnelle à moi-même : http://www.libsdl.org/languages.php</note>

Vous souhaitez utiliser la fameuse bibliothèque [[:sdl]] et elle ne vous paraît pas très claire d'utilisation ?

Parfait ^_^ cette page est la pour vous permettre **de vous adapter** à la SDL.

<note>Cette page n'est pas là pour réaliser un wiki de la SDL (d'ailleurs [[https://wiki.libsdl.org/FrontPage|le wiki est officiel]] est dispo **en anglais**)</note>

Quelques lien intéressant :
  * **(en)**[[http://www.sdltutorials.com/tutorials|Quelques tutoriels des différentes bibliothèques]]
  * **(en)**[[https://wiki.libsdl.org/APIByCategory|Les fonctions rangées par Catégorie]]
  * **(en)**[[https://wiki.libsdl.org/SDL_Keycode|Les représentations des touches lorsqu'elle sont pressées]]

===== Inclure la bibliothèque dans vos projets pour l'utiliser ? =====
Partons du principe que vous l'avez installée via un gestionnaire de paquet, c'est toujours plus simple sous GNU/Linux 8-)

Il faut simplement mettre un macro signifiant que vous l'incluez dans le fichier .c:
<code c>#include <SDL2/SDL.h></code>
vous pouvez aussi utiliser
<code c>#include "SDL.h"</code>

===== Et maintenons codons en C ! =====
C'était tout ? oui ! pour le moment :-| ça va se corser, c'est ça qui motive disons...

Allez un petit code :
<file - main.c>
#include <SDL2/SDL.h>

int main(int argc, char *argv[]) {
    SDL_bool done;
    SDL_Window *window;
    SDL_Event event;                        // On declare la structure d'event

    SDL_Init(SDL_INIT_VIDEO);               // Initialisation de la SDL2

    window = SDL_CreateWindow(  // Créer la fenêtre
        "SDL première fenêtre pour comprendre",
        SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED,
        640,
        480,
        SDL_WINDOW_OPENGL
    );

    // Check si la fenêtre à pu être crée
    if (window == NULL) {
        SDL_Log("La fenêtre n'a pas pu être créer %s", SDL_GetError());
        SDL_Quit();
        return 1;
    }

    done = SDL_FALSE;
    while (!done) {                         // Boucle du programme
        while (!done && SDL_PollEvent(&event)) {
            switch (event.type) {
                case (SDL_QUIT): {          // Dans le cas de fermeture de fenêtre
                    done = SDL_TRUE;
                    break;
                }

               case (SDL_KEYDOWN): {
               		SDL_Log("L'utilisateur vient juste de presser la touche %s", SDL_GetKeyName(event.key.keysym.sym));
               }
            }
        }
        SDL_Delay(1); // Repose votre OS durant quelques millisecondes (très déconseillé de mettre > 100)
        			// Votre OS ne repose très bien avec 1 milliseconde pourquoi mettre plus ?
    }

    SDL_DestroyWindow(window);        // On ferme la fenêtre visuellement et on la détruit en mémoire

    SDL_Quit();                       // Nettoyage des allocations mémoire
    return 0;
}
</file>

Avec ce code vous devriez comprend comment faire une fenêtre et comment se passe les événements.
Pour être plus clair je vais vous expliquer le concept :
Chaque fois que vous passer dans SDL_PollEvent vous prenez l'event un tête de file des événements et vous allez réalisé des algorithme selon son type, sa valeur.

**(en)**[[https://wiki.libsdl.org/SDL_Event|la liste des events sur le wiki officiel]] 

Un Event peut avoir comme type :
  * __key__ pour les touches de clavier
  * __motion__ pour les mouvements de souris
  * __button__ pour les click de souris
  * (plein d'autre voir la doc au-dessus)

Si l'Event est de type __key__ alors vous pouvez avoir :
  * sont type : appuyé SDL_KEYDOWN ou relâché SDL_KEYUP
  * sont keysym : c'est à dire sa valeur

Si l'Event est de type __mouse__ alors vous pouvez avoir :
  * FIXME

Si l'Event est de type __button__ alors vours pouvez avoir :
  * FIXME

Il y a beaucoup d'autre type d'Event voir la doc au-dessus
====== Compilez ! =====
Nous utilisons SDL2 donc il faut faire :
  gcc -o prog main.c `sdl2-config --cflags --libs`

Et voilà ! votre exécutable prêt à être exécuté via
  ./prog
